home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / msn / NSSBAdapter.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  6KB  |  163 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from logging import getLogger
  5. log = getLogger('msn.nssb')
  6. import msn
  7. from msn import MSNTextMessage
  8. from util import get, callsback
  9. from util.Events import EventMixin
  10.  
  11. class NSSBAdapter(EventMixin):
  12.     _instances = []
  13.     events = EventMixin.events | set(('on_buddy_join', 'on_buddy_leave', 'on_buddy_timeout', 'on_conn_success', 'on_authenticate', 'disconnect', 'contact_alias', 'needs_auth', 'recv_error', 'recv_text_msg', 'send_text_msg', 'typing_info', 'recv_action', 'recv_p2p_msg', 'transport_error'))
  14.     
  15.     def __init__(self, ns, to_invite = ()):
  16.         EventMixin.__init__(self)
  17.         self.ns = ns
  18.         self.principals = []
  19.         self.to_invite = to_invite
  20.         self._NSSBAdapter__chatbuddy = get(to_invite, 0, None)
  21.  
  22.     
  23.     def _closed(self):
  24.         return not (self.connected)
  25.  
  26.     _closed = property(_closed)
  27.     
  28.     def self_buddy(self):
  29.         return self.ns.self_buddy
  30.  
  31.     self_buddy = property(self_buddy)
  32.     
  33.     def invite(self, bname, callback = None):
  34.         self.buddy_join(bname)
  35.         callback.success()
  36.  
  37.     invite = callsback(invite)
  38.     
  39.     def buddy_join(self, bname):
  40.         if self._NSSBAdapter__chatbuddy is None:
  41.             self._NSSBAdapter__chatbuddy = bname
  42.         
  43.         if bname not in self.principals:
  44.             self.principals.append(bname)
  45.             self.event('on_buddy_join', bname)
  46.         
  47.  
  48.     
  49.     def send_text_message(self, message):
  50.         payload = message
  51.         netid = 32
  52.         msg = msn.Message('UUM', self._NSSBAdapter__chatbuddy, netid, 1, payload = str(payload))
  53.         self.ns.socket.send(msg, trid = True, callback = sentinel)
  54.         self.event('send_text_msg', payload)
  55.  
  56.     
  57.     def on_send_message(self, msg):
  58.         return NotImplemented
  59.  
  60.     
  61.     def leave(self):
  62.         if self in self._instances:
  63.             self._instances.remove(self)
  64.         
  65.         self.event('disconnect')
  66.  
  67.     
  68.     def connect(self, callback = None):
  69.         log.info('NSSB.connect()')
  70.         self._instances.append(self)
  71.         self.event('on_conn_success', self)
  72.         log.info('NSSB.on_conn_success()')
  73.         for bname in self.to_invite:
  74.             self.buddy_join(bname)
  75.         
  76.         self.event('on_authenticate')
  77.         log.info('NSSB.on_authenticate()')
  78.         callback.success()
  79.  
  80.     connect = callsback(connect)
  81.     
  82.     def connected(self):
  83.         return self.ns.connected()
  84.  
  85.     
  86.     def disconnect(self):
  87.         self.event('disconnect')
  88.  
  89.     
  90.     def close_transport(self):
  91.         pass
  92.  
  93.     
  94.     def on_conn_fail(self):
  95.         self.event('recv_error')
  96.  
  97.     
  98.     def authenticate(self, bname):
  99.         self.event('on_authenticate')
  100.  
  101.     
  102.     def send_typing_status(self, name, status):
  103.         payload = []
  104.         
  105.         line = lambda k, v: '%s: %s' % (k, v)
  106.         add = payload.append
  107.         add(line('MIME-Version', '1.0'))
  108.         add(line('Content-Type', 'text/x-msmsgscontrol'))
  109.         add(line('TypingUser', name))
  110.         add('')
  111.         add('')
  112.         payload = '\r\n'.join(payload)
  113.         netid = 32
  114.         msg = msn.Message('UUM', self._NSSBAdapter__chatbuddy, netid, 2, payload = payload)
  115.         self.ns.socket.send(msg, trid = True, callback = sentinel)
  116.  
  117.     
  118.     def on_error(self, msg):
  119.         pass
  120.  
  121.     
  122.     def recv_msg(self, msg):
  123.         
  124.         try:
  125.             print msg.type
  126.             getattr(self, 'recv_msg_%s' % msg.type, self.recv_msg_unknown)(msg)
  127.         except:
  128.             import traceback as traceback
  129.             traceback.print_exc()
  130.             print 'Exception handling MSG!'
  131.             print msg
  132.  
  133.  
  134.     
  135.     def recv_msg_plain(self, msg):
  136.         (name, nick) = msg.args[:2]
  137.         msg = MSNTextMessage.from_net(msg.payload)
  138.         self.event('recv_text_msg', name, msg)
  139.  
  140.     
  141.     def recv_msg_control(self, msg):
  142.         name = msg.args[0]
  143.         self.event('typing_info', name, bool(msg.payload.get('TypingUser', False)))
  144.  
  145.     
  146.     def recv_msg_unknown(self, msg):
  147.         print "ohnoes don't know this message type:", type(msg), msg
  148.  
  149.     
  150.     def incoming(cls, msg):
  151.         name = msg.args[0]
  152.         for x in cls._instances:
  153.             if x._NSSBAdapter__chatbuddy == name:
  154.                 break
  155.                 continue
  156.         else:
  157.             x = cls(None)
  158.         x.buddy_join(name)
  159.         x.recv_msg(msg)
  160.  
  161.     incoming = classmethod(incoming)
  162.  
  163.